Модуль:Публикация
local s = {} function s.parts(p) -- Индекс - номер части/заглавия, например: "wsource2" (p.args9) это "часть2 викитека". local ws= { wsource = {p.args1, p.args9, p.args17, p.args25, p.args33}, -- викитека / часть№ викитека wSource = {p.args2, p.args10, p.args18, p.args26, p.args34}, -- Викитека / часть№ Викитека } local h = { title = {p.args3, p.args11, p.args19, p.args27, p.args35}, -- заглавие№ / часть№ link = {p.args4, p.args12, p.args20, p.args28, p.args36}, -- ссылка / часть№ ссылка arcdate = {p.args5, p.args13, p.args21, p.args29, p.args37}, -- архив дата / часть№ архив дата arclink = {p.args6, p.args14, p.args22, p.args30, p.args38}, -- архив / часть№ архив utitle = {p.args7, p.args15, p.args23, p.args31, p.args39}, -- подзаголовок / часть№ подзаголовок info = {p.args8, p.args16, p.args24, p.args32, p.args40}, -- инфо / часть№ инфо lang = p.args42, -- язык / часть язык lang_ = p.args43, -- -язык / -часть язык material = p.args41, -- материал / часть материал } local oh= { title = {p.args44, p.args50, p.args56, p.args62, p.args68}, -- оригинал / часть№ оригинал link = {p.args45, p.args51, p.args57, p.args63, p.args69}, -- оригинал ссылка / часть№ оригинал ссылка arcdate = {p.args46, p.args52, p.args58, p.args64, p.args70}, -- архив дата / часть№ оригинал архив дата arclink = {p.args47, p.args53, p.args59, p.args65, p.args71}, -- оригинал архив / часть№ оригинал архив utitle = {p.args48, p.args54, p.args60, p.args66, p.args72}, -- оригинал подзаголовок / часть№ оригинал подзаголовок info = {p.args49, p.args55, p.args61, p.args67, p.args73}, -- оригинал инфо / часть№ оригинал инфо lang = p.args74, -- оригинал язык / часть оригинал язык lang_ = p.args75, -- -оригинал язык / -часть оригинал язык } local vid = p.args76 -- вид / часть вид local volumes = p.args77 -- томов / часть томов local a = { authormain = p.args78, -- основной автор / часть основной автор soauthors = p.args80, -- соавторы / часть соавторы author = {p.args82, p.args79, p.args86, p.args89, p.args91}, -- автор№ / часть автор№ authorname = {p.args83, p.args84, p.args88, p.args90, p.args92}, -- автор№ имя / часть автор№ имя otvetstv = {p.args81, p.args93, p.args94, p.args95, p.args96}, -- ответственный№ / часть ответственный№ authorlink = {p.args85, p.args87}, -- автор2 линк, автор3 линк / часть автор2 линк, часть автор3 линк } local lng = onevar(h'lang', h'lang_') h.lngstr, oh.lngstr = lngstr(h, oh) -- строки вывода языка и языка оригинала -- заглавия с доп. инфой и названиями на языке оригинала, до 5 шт. частей local headers = '' if is(h'title'1) then headers= header(1, h, ws) if is(oh'title'1) then headers=headers.. ' = '..header(1, oh) end -- oh - оригинальные названия if is(h'title'2) then headers=headers.. ' ; '..header(2, h, ws) if is(oh'title'2) then headers=headers.. ' = '..header(2, oh) end if is(h'title'3) then headers=headers.. ' ; '..header(3, h, ws) if is(oh'title'3) then headers=headers.. ' = '..header(3, oh) end if is(h'title'4) then headers=headers.. ' ; '..header(4, h, ws) if is(oh'title'4) then headers=headers.. ' = '..header(4, oh) end if is(h'title'5) then headers=headers.. ' ; '..header(5, h, ws) if is(oh'title'5) then headers=headers.. ' = '..header(5, oh) end end end end end end -- вид if is(vid) then vid = ' : '..vid end -- томов if is(volumes) then volumes = ' : '.._volumes(volumes, lng, a) end -- доп. инф. об авторах local otvetstvennie = ; if is(a'authormain') or is(a'author'2) or is(a'soauthors') or is(a'otvetstv'1) then otvetstvennie = ' / '..extauthors(a, lng) end -- возврат результата return headers..vid..volumes..otvetstvennie end -- Локальные функции ----------------------------- -- проверка переменной, возврат её или nil если пустая function is(var) if (var '' or var nil) then return nil else return var end end -- возврат имеющейся переменной, если есть обе - первой, иначе '' function onevar(var1,var2) if (var1 and var1 ~= '') then return var1 elseif (var2 and var2 ~= '') then return var2 else return '' end end -- создание ссылки на ВП, ВТ, или интернет function link(anchor, wplink, wslink, inetlink) local str = '' if is(anchor) then if is(wplink) then str = ''..anchor..'' elseif is(wslink) then str = ''..anchor..'' elseif is(inetlink) then str = ''..anchor..'' else str = anchor end end return str end -- Заглавие со ссылкой, инфа function header(n, h, ws) -- n - номер заглавия; h - массив с заглавиями; ws - ссылка на викитеку local title, ilink = h'title'n, h'link'n local material, arcdate, arclink, utitle, info, lngstr = h'material', h'arcdate'n, h'arclink'n, h'utitle'n, h'info'n, h'lngstr' local str = {} -- заглавие со ссылкой if (ws) then ws = onevar(ws'wsource'n, ws'wSource'n) end table.insert(str, link(title, nil, ws, ilink)) -- материал if (n 1) then table.insert(str, mat(material)) end -- подзаголовок, инфо if is(utitle) then table.insert(str, ' : '..utitle) end if is(info) then table.insert(str, ' : '..info) end -- язык if (n 1 and is(lngstr)) then table.insert(str, ' : '..lngstr) end -- ссылка на архив if is(arcdate) and is(arclink) then table.insert(str, ' : [арх. '..mw.getContentLanguage():formatDate('j xg Y',arcdate)..']') end return table.concat(str) end -- язык function lngstr(h, oh) local l, ol = '', '' -- язык if is(h'lang_') then l = ''..h'lang_'.. elseif is(h'lang') then l = mw.getCurrentFrame():expandTemplate{title='lg',args={h'lang','[]'}} end -- вызов -- оригинал язык if is(oh'lang_') then ol = ..oh'lang_'.. elseif is(oh'lang') then ol = 'с '..mw.getCurrentFrame():expandTemplate{title='lg',args={oh['lang'}}..']' end -- вызов return l, ol end -- материал function mat(str) if not is(str) then return '' end local m = { 'Видеозапись','Videorecording', 'Звукозапись','Sound recording', 'Изоматериал','Graphic', 'Карты','Cartographic material', 'Кинофильм','Motion picture', 'Комплект','Kit', 'Микроформа','Microform', 'Мультимедиа','Multimedia', 'Ноты','Music', 'Предмет','Object', 'Рукопись','Manuscript', 'Текст','Text', 'Шрифт Брайля','Braille', 'Электронный ресурс','Electronic resource' } str = mw.ustring.upper(mw.ustring.sub(str, 1,1))..mw.ustring.lower(mw.ustring.sub(str, 2)) -- Регистр: 1 буква заглавная for _, s in ipairs(m) do if (str s) then return ' '..s..'' end end return '' end -- томов function _volumes(volumes, lng, a) if not is(volumes) then return '' end str = mw.getCurrentFrame():expandTemplate{title='бсокр',args={lng, 'в томах', volumes}} return str end -- авторы/ответственные function extauthors(a, lng) -- aвтор2, или aвтор2 + cоавторы if is(a'author'2) or (is(a'author'2) and is(a'soauthors')) then return authors(a, lng) -- осн.автор + соавторы + ответственные elseif is(a'authormain') and is(a'soauthors') and is(a'otvetstv'1) then return a'authormain'..' ; '..a'soauthors'..' ; '..otvetstvennye(a) -- осн.автор + соавторы elseif is(a'authormain') and is(a'soauthors') then return a'authormain'..' ; '..a'soauthors' -- осн.aвтор + ответственные elseif is(a'authormain') and is(a'otvetstv'1) then return a'authormain'..' ; '..otvetstvennye(a) -- осн.автор, или осн.автор + автор2 elseif is(a'authormain') or (is(a'authormain') and is(a'author'2)) then return a'authormain' -- автор2 + ответственные elseif is(a'author'2) and is(a'otvetstv'1) then return authors(a, lng)..' ; '..otvetstvennye(a) -- соавторы + ответственные elseif is(a'soauthors') and is(a'otvetstv'1) then return a'soauthors' ..' ; '..otvetstvennye(a) -- соавторы elseif is(a'soauthors') then return a'soauthors' -- ответственные elseif is(a'otvetstv'1) then return otvetstvennye(a) end end -- ответственные function otvetstvennye(a) local str = {} if is(a'otvetstv'1) then table.insert(str, a'otvetstv'1) if is(a'otvetstv'2) then table.insert(str, a'otvetstv'2) if is(a'otvetstv'3) then table.insert(str, a'otvetstv'3) if is(a'otvetstv'4) then table.insert(str, a'otvetstv'4) if is(a'otvetstv'5) then table.insert(str, a'otvetstv'5) end end end end end return table.concat(str, ' ; ') end -- доп. авторы function authors(a,lng) local str = {} local an = function (n) if is(a'authorname'n) then return a'authorname'n..' ' else return '' end end if is(a'author'1) then table.insert(str, an(1)..a'author'1) if is(a'author'2) then table.insert(str, ', '..link(an(2)..a'author'2, a'authorlink'2)) if is(a'author'3) then table.insert(str, ', '..link(an(3)..a'author'3, a'authorlink'3)) -- 4-го и 5-го автора в тэг 'и другие' if is(a'author'4) then local idr = an(4) .. a'author'4 if is(a'author'5) then idr = idr .. ', '..an(5)..a'author'5 end table.insert(str, mw.getCurrentFrame():expandTemplate{title='бсокр',args={lng, 'и другие', idr}}) -- вызов end end end end return table.concat(str) end return s